# + 加法运算符
# 1. 回顾: 数值型数据中, 加法运算就是求两个数字的和
print(12 + 23)  # 35
# 数值型数据包括  int float bool 可以随意相加, True == 1  False == 04
print(12 + 1.4 + True)  # 14.4

print("------------------------------")
# 2. 容器类型数据相加,就是数据容器的合并(拼接)
# str
print('123' + 'abc')  # 123abc
# list
print([1, 2, 3] + ['a', 'b', 'c'])  # [1, 2, 3, 'a', 'b', 'c']
# tuple
tuple1 = (1, 2, 3)
tuple2 = ('a', 'b', 'c')
# 容器类型的加法运算,不会修改原来的容器,而是产生了一个新的容器类型数据.
print(tuple1 + tuple2)  # (1, 2, 3, 'a', 'b', 'c')
print(tuple1)  # (1, 2, 3)
print(tuple2)  # ('a', 'b', 'c')

# 注意: set 和dict 不能使用加法运算
# TypeError: unsupported operand type(s) for +: 'set' and 'set'
# print({1, 2, 3} + {3, 4, 5})
# TypeError: unsupported operand type(s) for +: 'dict' and 'dict'
# print({'a': 1} + {'b': 2})

# 注意: 容器间的加法运算只能在相同数据类型的容器间进行
# TypeError: can only concatenate tuple (not "list") to tuple
# print((1, 2, 3) + [1, 2, 3])

print('-----------------')

# * 乘法运算符
# 1. 回顾 : 数值型数据中 乘法运算就是求两个数字的积
print(3 * 4)  # 12
print("------------------------------")

# 2. 容器类型相乘,就是将容器赋值n份并相加
# str
print('123' * 3)  # 123123123
# list
print([1, 2, 3] * 3)  # [1, 2, 3, 1, 2, 3, 1, 2, 3]
# tuple
tuple3 = (1, 2, 3)
# 乘法运算不会修改容器的原有数据,而是产生了一个新的数据容器
print(tuple3 * 3)  # (1, 2, 3, 1, 2, 3, 1, 2, 3)
print(tuple3)  # (1, 2, 3)

# 注意: 乘法运算的本质就是将容器复制多份,再进行相加,所以不能进行加法运算的数据类型(set , dict)一样不能进行乘法运算

# 容器类型数据仅可以和整型数据进行乘法运算
# TypeError: can't multiply sequence by non-int of type 'float'
# print((1, 2, 3) * 3.2)

print('-------------------')

# in not in
# 判断元素是否在容器内
# 1. 使用in 或者not in 判断字典类型数据时,判断的是键是否存在
dict1 = {'name': '小强', 'age': 12}
# 判断name是否在dict中
print('name' in dict1)  # True
# 判断小强是否在dict中
print('小强' in dict1)  # False

# 2. 使用in 或者not in 判断字符串时, 只能判断字符元素是否在字符串中
str1 = 'hello world and python'

# 判断 hello 是否在 str1 中
print('hello' in str1)  # True
# 判断1 是否在str1中
# TypeError: 'in <string>' requires string as left operand, not int
# print(1 in str1)

# 也可以理解为,我们要判断元素是否在该容器内,那么这个容器必须可以存储到该容器内.

# 3. list tuple set 都可以使用in 和 not in 进行判断
print(1 in (1, 2, 3))  # True
print(1 in [1, 2, 3])  # True
print(1 in {1, 2, 3})  # True
